import * as vscode from "vscode";
import { showErrorMessage, showInformationMessage } from "../vscode/message";
import { chatjptConfig, userDataToChat } from "@ap/webView/chatjpt";
import { arenaErrorMsg } from "../vscode/errorMsg";
import { sleep, chatjptViewSleepMs } from "../data";
import { CommandId } from "@ap/command";

const STATUS_BAR_TOOLTIP = "Chat吉PT";

// 扩展QuickPickItem接口以包含自定义的type字段
interface ExtendedQuickPickItem extends vscode.QuickPickItem {
  type: number;
}

// 工具条项目定义分离出来，便于管理和可能的扩展
export const Items: ExtendedQuickPickItem[] = [
  {
    label: "纠错Debug",
    type: 1,
  },
  {
    label: "详细解释",
    type: 3,
  },
  {
    label: "长函数拆分",
    type: 13,
  },
  {
    label: "优化重构",
    type: 2,
  },
  {
    label: "注释生成",
    type: 6,
  },
];

/**
 * 异步显示快速选择框，并根据选择的操作发送消息到webview。
 * @param text 用户输入的文本，将随选择的操作一起发送到webview。
 */
export const showBar = async (text: string) => {
  if (!text) {
    return;
  }
  try {
    // 显示快速选择框，允许用户选择一项操作。
    const selectedOption = await vscode.window.showQuickPick(Items, {
      title: STATUS_BAR_TOOLTIP,
      matchOnDescription: true,
      canPickMany: false,
    });
    // 如果用户做出了选择。
    if (selectedOption) {
      const data = userDataToChat();
      if (data) {
        vscode.commands.executeCommand(CommandId.chatjpt_workbench);
        await sleep(chatjptViewSleepMs);
        // 如果webview视图存在，则显示视图并发送用户选择的消息。
        if (chatjptConfig && chatjptConfig.view) {
          chatjptConfig.view.webview.postMessage({
            type: "postFastChat",
            labelChat: selectedOption.label,
            typeChat: selectedOption.type,
            text: text,
            nickname: data.userData.data?.nickname,
            avatar: data.userData.data?.avatar,
            userId: data.userData.data?.userId,
            userData: data.userData,
            userAgnet: data.ua,
          });
        } else {
          showInformationMessage(
            "请先手动激活Chat吉PT对话界面，再使用本功能。",
          );
        }
      } else {
        showErrorMessage(arenaErrorMsg.LOG_IN_TO_THE_SHINJIMA_ACCOUNT);
      }
    }
  } catch (error) {
    // 如果在选择过程中发生错误，显示错误消息。
    showErrorMessage(`选择操作遇到错误: ${error}`);
  }
};
